package cn.mesmile.design.prototype;

/**
 * @author zb
 * @date 2020/11/15 14:41
 * @Description:
 */
public class Main {

    /**
     * 通过对一个类进行实例化来构造新对象不同的是，原型模式是通过拷贝一个现有对象生成新对象的
     *
     * 浅拷贝实现 Cloneable，深拷贝是通过实现 Serializable 读取二进制流
     *
     * 拓展
     *
     * 浅拷贝
     * 如果原型对象的成员变量是基本数据类型（int、double、byte、boolean、char等），将复制一份给克隆对象；
     * 如果原型对象的成员变量是引用类型，则将引用对象的地址复制一份给克隆对象，也就是说原型对象和克隆对象的成员变量指向相同的内存地址
     * ​
     * 通过覆盖Object类的clone()方法可以实现浅克隆
     * 深拷贝
     * 无论原型对象的成员变量是基本数据类型还是引用类型，都将复制一份给克隆对象，如果需要实现深克隆，可以通过序列化(Serializable)等方式来实现
     */

    public static void main(String[] args) throws CloneNotSupportedException {

        Person person = new Person();

        person.setAge(18);
        person.setName("用户名");

        Person person2 =  person.clone();

        person2.setName("用户名222");

        System.out.println("person.getName() = " + person.getName());
        System.out.println("person2.getName() = " + person2.getName());
        System.out.println("person2.getAge() = " + person2.getAge());


    }
}
